문제 1931

회의실 배정

입력 : 첫째 줄에 회의의 수 N(1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N+1 줄까지 각 회의의 정보가 주어지는데 이것은 공백을 사이에 두고 회의의 시작시간과 끝나는 시간이 주어진다. 시작 시간과 끝나는 시간은 231-1보다 작거나 같은 자연수 또는 0이다.
출력 : 첫째 줄에 최대 사용할 수 있는 회의의 최대 개수를 출력한다.

import sys
input = sys.stdin.readline

case = []
for _ in range(int(input())):
    a = list(map(int,input().split()))
    case.append(a)
case.sort(key=lambda x: (x[0], x[1]))

CASE = []
cAse = set()
c = len(cAse)
for _ in case: #어차피 시작시간도 같은데 끝시간이 더 긴건 필요업냠냠냠냠냠,,..
    cAse.add(_[0])
    if _[1] == _[0]: #시작하자마자끝나는건필요해...
        CASE.append(_)
    elif len(cAse) != c: #정렬한 뒤, 저장하는거니까... 시작시각이 같은 회의들 중 일찍끝나는것만 필요
        c = len(cAse)
        CASE.append(_)

result = 1
now = case[0]
for _ in case[1::]:
    if now[1] > _[1]: #now보다 지금 _의 끝 시작이 더 작다? -> 이녀석은 더 효율적인 회의임 얘 선택해야해.. 근데 회의 카운트 수를 높일 수는 없음.
        now = _ #그냥 now를 더 좋은 회의로 바꾸는거임. 3 100, 4 5인 경우에 해당..

    elif now[1] <= _[0]: #근데..? _의 시작시간이..? now의 끝나는 시작과 같다? -> 이건 바로 회의 수 추가mood ~~ 완전 그 느낌임...
        if _[0] == _[1]: #시작시각과 끝 시각이 같은 경우.
            result += 1 #무조건 추가
        else:
            result += 1 #추가하고
            now = _ #현재 회의 바꾸고...

print(result)
  • 푼 방식은.. 주석과같다...~_~